import axios from 'axios';

// 创建axios实例
const apiClient = axios.create({
  baseURL: import.meta.env.VITE_API_BASE_URL || 'http://121.89.213.194:3001/',
  timeout: 10000
});

// 请求拦截器 - 添加认证头
apiClient.interceptors.request.use(config => {
  const token = localStorage.getItem('token');
  if (token) {
    config.headers = config.headers || {};
    config.headers.Authorization = `Bearer ${token}`;
  }
  return config;
}, error => {
  return Promise.reject(error);
});

// 响应拦截器 - 处理认证错误
apiClient.interceptors.response.use(
  response => response,
  error => {
    if (error.response?.status === 401) {
      // 跳转到登录页或刷新token
      window.location.href = '/login?redirect=' + encodeURIComponent(window.location.pathname);
    }
    return Promise.reject(error);
  }
);
// 获取学生列表
export const getStudentList = async (params: {
  page?: number;         // 页码(可选，默认：1)
  pagesize?: number;     // 每页数量(可选，默认：10，最大：100)
  username?: string;     // 用户名(可选，模糊搜索)
  classId?: string;      // 班级ID(可选，需为有效的MongoDB ObjectId)
  status?: number;       // 状态(可选，枚举：0-禁用/1-启用)
  email?: string         // 邮箱(可选，模糊搜索)
}) => {
  try {
    console.log('正在获取学生列表，参数:', params);
    const response = await apiClient.get<StudentListResponse>('/student/list', { params });
    console.log('获取学生列表响应:', response.data);
    return response;
  } catch (error: any) {
    if (error.response) {
      console.error('获取学生列表失败 - 响应数据:', error.response.data);
      console.error('状态码:', error.response.status);
      console.error('请求配置:', error.response.config);
    } else if (error.request) {
      console.error('获取学生列表失败 - 无响应:', error.request);
    } else {
      console.error('获取学生列表失败 - 错误:', error.message);
    }
    throw error;
  }
};

// 定义学生接口
export interface Student {
  _id: string;
  username: string;
  sex?: string;
  age?: number;
  email?: string;
  classId?: string;
  className?: string;
  avatar?: string;
  status: number;
  idCard?: string;
  creator?: {
    _id: string;
    username: string;
  };
  role?: string;
  createTime?: string;
}

// API响应接口
interface BaseResponse {
  code: number;
  msg: string;
}

export interface StudentListResponse extends BaseResponse {
  data: {
    total: number;
    totalPage: number;
    page: number;
    pagesize: number;
    list: Student[];
  };
}

export interface StudentResponse extends BaseResponse {
  data: {
    _id: string;
    username: string;
    sex?: string;
    age?: number;
    email?: string;
    classId?: string;
    className?: string;
    avatar?: string;
    status: number;
    idCard?: string;
    creator?: string;
    createTime?: string;
  };
}



// 创建学生
export const createStudent = async (data: {
  username: string;
  password: string;
  sex?: '男'|'女'|'其他';
  age?: number;
  email?: string;
  classId?: string;
  avatar?: string;
  status?: 0|1;
  idCard?: string
}) => {
  // 设置默认值
  const requestData = {
    ...data,
    sex: data.sex || '其他',
    avatar: data.avatar || '/static/images/default-avatar.png',
    status: data.status ?? 1
  };
  console.log('创建学生请求数据:', data);
  try {
    const response = await apiClient.post<StudentResponse>('/student/create', requestData);
    console.log('创建学生响应:', response.data);
    return response;
  } catch (error: any) {
    if (error.response) {
      console.error('创建学生失败 - 响应数据:', error.response.data);
      console.error('状态码:', error.response.status);
    }
    throw error;
  }
};

// 更新学生
export const updateStudent = async (data: {
  id: string;           // 学生ID(必填，需为有效的MongoDB ObjectId)
  username?: string;    // 用户名(可选，2-20字符)
  password?: string;    // 密码(可选，最少6字符)
  sex?: string;         // 性别(可选，枚举：男/女/其他)
  age?: number;         // 年龄(可选，6-100岁)
  email?: string;       // 邮箱(可选，需符合邮箱格式)
  classId?: string;     // 班级ID(可选，需为有效的MongoDB ObjectId)
  avatar?: string;      // 头像(可选)
  status?: number;      // 状态(可选，枚举：0-禁用/1-启用)
  idCard?: string       // 身份证号(可选)
}) => {
  console.log('更新学生请求数据:', data);
  try {
    const response = await apiClient.post<StudentResponse>('/student/update', data);
    console.log('更新学生响应:', response.data);
    return response;
  } catch (error: any) {
    if (error.response) {
      console.error('更新学生失败 - 响应数据:', error.response.data);
      console.error('状态码:', error.response.status);
    }
    throw error;
  }
};

// 获取学生详情
export const getStudentDetail = async (params: { id: string }) => {
  try {
    console.log('正在获取学生详情，参数:', params);
    const response = await apiClient.get<StudentResponse>('/student/detail', { params });
    console.log('获取学生详情响应:', response.data);
    return response;
  } catch (error: any) {
    if (error.response) {
      console.error('获取学生详情失败 - 响应数据:', error.response.data);
      console.error('状态码:', error.response.status);
    }
    throw error;
  }
};

// 删除学生
export const removeStudent = async (data: { id: string }) => {
  console.log('删除学生请求数据:', data);
  try {
    const response = await apiClient.post<BaseResponse>('/student/remove', data);
    console.log('删除响应:', response.data);
    return response;
  } catch (error: any) {
    if (error.response) {
      console.error('删除学生失败 - 响应数据:', error.response.data);
      console.error('状态码:', error.response.status);
    }
    throw error;
  }
};